vue实现穿梭框功能(ES6语法)

1、vue两种实现穿梭框的方式。

方式一:Vue结合ES6语法实现穿梭框。(优点:自写组件复用性强,易修改)

方式二:引入Element中transfer插件简单写了CSS样式和HTML。(优点,引入组件即可,易上手操作)

2、实现效果:左边为复选框按钮,可全选可单选,选中后点击按钮到左侧。右边实现效果同理。并用计算属性动态计算出每个数组共多少条数据,选中了多少条。实现效果图如下:

自写组件:

 引入Element组件

3、方式一:样式代码实现

<template>
  <div class="hello">
     <div class="transfer">
     	<div class="transfer_left">
			<div class="transfer_left_top">
				<p>
				  <input type="checkbox" v-model="checkAll" @change="checkall" value="全选" /> 全选
				</p>
				<p>
					{{num(leftdata)}}/{{leftdata.length}}
				</p>
			</div>
			<div class="checkbox_left">
				<p v-for="(item,index) in leftdata" :key="index">
					<input type="checkbox" v-model="item.check" value="item.check" @change="curcheck()"/> <span>{{item.value}}</span>
				</p>
			</div>
     	</div>
		<div class="transfer_main">
			<div class="toright" @click="toright">
				>>
			</div>
			<div class="toleft"  @click="toleft">
				<<
			</div>
		</div>
		<div class="transfer_left">
			<div class="transfer_left_top">
				<p>
				  <input type="checkbox" v-model="checkAll1"  @change="checkall1" value="全选" /> 全选
				</p>
				<p>
					{{num(rightdata)}}/{{rightdata.length}}
				</p>
			</div>
			<div class="checkbox_left">
				<p v-for="(item,index) in rightdata" :key="index">
					<input type="checkbox" v-model="item.check" value="item.check"/> <span>{{item.value}}</span>
				</p>
			</div>
		</div>
     </div>
  </div>
</template>

    逻辑代码实现:具体方法已加以说明。

 computed:{
	  // !!!计算属性是一个属性,不能直接传递值。方法可以直接传递值。因此以return的方式返回值
	  num(){//计算属性传递参数,根据传入的数组返回符合条件的长度
		  return data =>  data.filter(item=>item.check).length
	  }
  },
  //将左边数据放到右边
	  toright(){
		  // 用filter方法循环数组,将符合条件的数组返回
		  let selectdata = this.leftdata.filter(item => item.check == true)
		  this.rightdata.push(...selectdata) //将过滤后的数组需要添加到右边的数组中
		  this.leftdata = this.leftdata.filter(v =>!v.check)//留下左边数组没有没选中的数组
		  },
	 //将右边数据放到左边
	  toleft(){
		  let selectdata = this.rightdata.filter(item => item.check == true)
		  this.leftdata.push(...selectdata) 
		  this.rightdata = this.rightdata.filter(v =>!v.check)
	  },
	  //选中全部 当值全部选中是 全选按钮也选中,有一个不选中则都不选中
	  checkall(){
		  this.leftdata.forEach(v=>v.check = this.checkAll)
	  },
	  //当值全部选中是 全选按钮也选中,有一个不选中则都不选中
	  curcheck(){
		  this.checkAll = this.leftdata.every(v =>v.check)
	  },
	  //选中全部
	  checkall1(){
	  	 this.rightdata.forEach(v=>v.check = this.checkAll1)
	  },
	  curcheck1(){
	  	 this.checkAll1 = this.rightdata.every(v =>v.check)
	  }

 4、方式二:按需引入elementUi

import Vue from 'vue';
import { Transfer } from 'element-ui';
Vue.use(Transfer);
<template>
  <el-transfer v-model="value" :data="data"></el-transfer>
</template>
<script>
  export default {
    data() {
      const generateData = _ => {
        const data = [];
        for (let i = 1; i <= 15; i++) {
          data.push({
            key: i,
            label: `备选项 ${ i }`,
            disabled: i % 4 === 0
          });
        }
        return data;
      };
      return {
        data: generateData(),
        value: [1, 4]
      };
    }
  };
</script>

 如果大家有更好的方法欢迎评论留言~~

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue穿梭(Transfer)组件通常用于在两个列表之间进行数据的转移和选择。如果你想要在穿梭中添加搜索功能,可以使用Vue的计算属性和过滤器来实现。 首先,你可以在穿梭组件中添加一个输入,用于输入搜索关键字。然后,使用计算属性来过滤列表中的数据,只显示与搜索关键字匹配的项。 下面是一个简单的示例代码: ```vue <template> <div> <input type="text" v-model="keyword" placeholder="输入关键字搜索"> <el-transfer filterable :filter-method="filterMethod" :data="data" :target-keys="targetKeys" @change="handleChange" ></el-transfer> </div> </template> <script> export default { data() { return { keyword: '', data: [], // 穿梭的数据源 targetKeys: [], // 已选项的key }; }, computed: { filteredData() { const keyword = this.keyword.toLowerCase(); return this.data.filter(item => item.label.toLowerCase().includes(keyword)); }, }, methods: { filterMethod(query, item) { return item.label.toLowerCase().indexOf(query.toLowerCase()) > -1; }, handleChange(targetKeys) { this.targetKeys = targetKeys; }, }, }; </script> ``` 在上面的示例中,我们使用了Element UI库中的`el-transfer`组件,并配置了`filterable`属性以开启过滤功能。然后,我们通过`filter-method`属性指定了一个过滤方法`filterMethod`,该方法用于判断每一项是否匹配搜索关键字。在计算属性`filteredData`中,我们根据搜索关键字对数据进行过滤操作。 当用户输入关键字时,过滤方法`filterMethod`会自动调用,根据返回值(true或false)来判断是否显示该项。最后,我们在`@change`事件中监听选项的变化,将选中的项保存到`targetKeys`中。 这样,你就可以在Vue穿梭中添加搜索功能了。根据你的实际需求,你可能需要对示例代码进行适当的修改和调整。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值